using System;
namespace UnsafeCodeApplication
{
  /*
  数组名称和一个指向与数组数据具有相同数据类型的指针是不同的变量类型。例如，int *p 和 int[] p 是不同的类型。您可以增加指针变量 p，
  因为它在内存中不是固定的，但是数组地址在内存中是固定的，所以您不能增加数组 p。
  C#中声明的变量在内存中的存储受垃圾回收器管理；因此一个变量（例如一个大数组）有可能在运行过程中被移动到内存中的其他位置。如果一个变
  量的内存地址会变化，那么指针也就没有意义了。
  解决方法就是使用fixed关键字来固定变量位置不移动
  */
  class TestPointer
  {
    public unsafe static void Main()
    {
      int[] list = { 10, 100, 200 };
      fixed (int* ptr = list)

        /* 显示指针中数组地址 */
        for (int i = 0; i < 3; i++)
        {
          Console.WriteLine("Address of list[{0}]={1}", i, (int)(ptr + i));
          Console.WriteLine("Value of list[{0}]={1}", i, *(ptr + i));
        }
      Console.ReadKey();
    }
  }
}